class Solution {
public:
    vector<int> rightSideView(TreeNode* root) 
    {
        //这个题目的思路就是层序遍历，记录每一层的第一个元素即可
        queue<TreeNode*> q;
        q.push(root);
        vector<int> ret;
        if(root == nullptr)
        {
            return ret;
        }
        while(q.size())
        {
            int size = q.size();//记录这一层的元素个数
            for(int i = 0;i<size;i++)
            {
                TreeNode* tmp = q.front();
                q.pop();
                if(i == 0)
                {
                    //记录每层从右往左的第一个节点
                    ret.push_back(tmp->val);
                }
                if(tmp->right)
                {
                    q.push(tmp->right);
                }
                if(tmp->left)
                {
                    q.push(tmp->left);
                }
            }
        }   
        return ret;
    }
};